/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sopra09.lv6659438.controller.eintragLoeschen;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import sopra09.lv6659438.logik.eintragLoeschen.EintragLoeschenALLocal;
import sopra09.lv6659438.objekte.Buch;
import sopra09.lv6659438.objekte.Literatureintrag;
import sopra09.lv6659438.objekte.Zeitschrift;

/**
 * Löscht einen vom Nutzer ausgewählten Literatureintrag
 * @author TJ
 */
public class EintragLoeschenUCA extends de.fernunihagen.informatik.pi3.struts.UseCaseAction {
    
    private final static String STARTE_EINTRAG_AUSWAEHLEN = "starteEintragAuswaehlen";
    
    /**
     * Leitet an den Anwendungsfall 'Eintrag auswählen' weiter und löscht den
     * dort ausgewählten Literatureintrag
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return ActionForward
     */
    public ActionForward starteEintragLoeschen(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        log.warn("Aus starteEintragLoeschen forwarden nach: " + mapping.findForward(STARTE_EINTRAG_AUSWAEHLEN).getPath());
        return mapping.findForward(STARTE_EINTRAG_AUSWAEHLEN);
    }

    /**
     * Löscht den im Anwendungsfall 'Eintrag auswählen' ausgewählten Literatureintrag
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return ActionForward
     */
    public ActionForward loescheEintrag(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        log.warn("loescheEintrag(...) beginnt");
        Literatureintrag eintrag;
        boolean erfolg;      

        // das zum löschen ausgewählte item aus dem session scope auslesen
        String auswahl = (String) request.getSession().getAttribute("selektiertesItem");
        // es wurde kein item ausgewählt
        if (auswahl == null) {
            log.warn("auswahl ist: " + auswahl);
            log.warn("Aus loescheEintrag forwarden nach: " + mapping.findForward(STARTE_EINTRAG_AUSWAEHLEN).getPath() +
                    " und eine Fehlermeldung ausgeben.");
          ActionMessages fehler = new ActionMessages();
          fehler.add("keinItemAusgewaehlt", new ActionMessage("fehlermeldung.keinItemAusgewaehlt"));
          saveErrors(request, fehler);

         return mapping.findForward(STARTE_EINTRAG_AUSWAEHLEN);
        }
        // es wurde ein eintrag ausgewählt
        else {
        // der erste von den drei einträgen der aktuellen ergebnisseite wurde ausgewählt
        if (auswahl.equalsIgnoreCase("item1"))
            eintrag = (Literatureintrag) request.getSession().getAttribute("Eintrag1");
        // der zweite von den drei einträgen der aktuellen ergebnisseite wurde ausgewählt
        else if (auswahl.equalsIgnoreCase("item2"))
            eintrag = (Literatureintrag) request.getSession().getAttribute("Eintrag2");
        // der dritte von den drei einträgen der aktuellen ergebnisseite wurde ausgewählt
        else
            eintrag = (Literatureintrag) request.getSession().getAttribute("Eintrag3");
        log.warn("eintrag wurde der Wert " + eintrag.toString() + " zugewiesen");        

        // der gewählte eintrag ist vom typ 'zeitschrift'
        // es wird an loescheZeitschrift() weitergeleitet
        if (eintrag.getTyp().equalsIgnoreCase("zeitschrift")) {
            Zeitschrift zeitschrift = (Zeitschrift) eintrag;
            log.warn("es wird an loescheZeitschrift(...) weitergeleitet.");
            erfolg = loescheZeitschrift(zeitschrift);
        } 
        // der gewählte eintrag ist vom typ 'buch' 
        // es wird an loescheBuch() weitergeleitet
        else {
            log.warn("es wird an loescheBuch(...) weitergeleitet.");
            Buch buch = (Buch) eintrag;
            erfolg = loescheBuch(buch);}

        // der ausgewählte eintrag wurde erfolgreich gelöscht
        if (erfolg) {
            log.warn("erfolg ist: " + erfolg);
            log.warn("Aus loescheEintrag forwarden nach: " + mapping.getInputForward().getPath());
            return mapping.getInputForward();
        }
        // der ausgewählte eintrag konnte nicht gelöscht werden
        else {
            log.warn("erfolg ist: " + erfolg);
            log.warn("Aus loescheEintrag forwarden nach: " + mapping.findForward(STARTE_EINTRAG_AUSWAEHLEN).getPath() +
                    " und eine Fehlermeldung ausgeben.");
          ActionMessages fehler = new ActionMessages();
          fehler.add("ausgewaehlterEintragNichtGeloescht", new ActionMessage("fehlermeldung.ausgewaehltenEintragLoeschen"));
          saveErrors(request, fehler);

         return mapping.findForward(STARTE_EINTRAG_AUSWAEHLEN);}
        }
    }

    /**
     * Hilfsmethode zum löschen von Zeitschriften
     * @param item Die übergebene Zeitschrift
     * @return true, wenn die übergebene zeitschrift gelöscht wurde, sonst false 
     */
    private boolean loescheZeitschrift(Zeitschrift item) {
        log.warn("loescheZeitschrift(...) beginnt");
        boolean erfolgreichGeloescht;
        Zeitschrift zeitschrift = item;
        
        try {
        InitialContext ic = new InitialContext();
        EintragLoeschenALLocal eintragLoeschen = (EintragLoeschenALLocal) ic.lookup("java:comp/env/ejb/eintragLoeschen");

        erfolgreichGeloescht = eintragLoeschen.loescheZeitschrift(zeitschrift);
        log.warn("erfolgreichGeloescht ist: " + erfolgreichGeloescht);

        return erfolgreichGeloescht;

        } catch (NamingException e) {
            e.toString();
            return false;
        }
    }

    /**
     * Hilfsmethode zum löschen von Büchern
     * @param item Das übergebene Buch
     * @return true, wenn das übergebene buch gelöscht wurde, sonst false
     */
    private boolean loescheBuch(Buch item) {
        log.warn("loescheBuch(...) beginnt");
        boolean erfolgreichGeloescht;
        Buch buch = item;

        try {
        InitialContext ic = new InitialContext();
        EintragLoeschenALLocal eintragLoeschen = (EintragLoeschenALLocal) ic.lookup("java:comp/env/ejb/eintragLoeschen");

        erfolgreichGeloescht = eintragLoeschen.buchLoeschen(buch);
        log.warn("erfolgreichGeloescht ist: " + erfolgreichGeloescht);

        return erfolgreichGeloescht;

        } catch (NamingException e) {
            e.toString();
            return false;
        }
    }

   }


